# coding: utf-8
# @Author: cyl
# @File: 01os.py
# @Time: 2024/07/21 11:31:47
import os
import shutil


# 1 执行cmd linux命令 --> os.system("ipconfig")、os.system("dir")
os.system("ifconfig")
os.system("ls -l")
# 返回值: 如果为 0, 则表示命令执行成功, 其它值则表示错误, 其他返回值: https://www.cnblogs.com/hls-code/p/16968569.html

# log模块, 如果没有则需要创建文件夹, 有些电脑是权限
# if 0 != os.system("mkdir logs"):
#     return

# 2 列出指定目录下所有文件和目录, 包括隐藏
print(os.listdir())

# 3 获取当前目录的绝对路径
BASE_DIR: str = os.getcwd()
print(BASE_DIR)

# 4 os.chdir() 改变工作目录 == cd ...

# 5 os.path 路径模块
pathvar = __file__
print("pathvar: ", pathvar)
# basename() 返回文件名部分
res = os.path.basename(pathvar)
print("res: ", res)
print("当前文件类型: ", res.split(".")[-1]) # py
"""
作业1: 2库下有很多txt yaml json py, 各5个(自己造), 需要对文件类型分类并剪切到上级目录；比如: 将01os.py剪切到与2库同级目录, 目录名随意；完成后将新创建的目录删除, 保留2库下的所有内容
"""
# dirname() 返回路径部分
res = os.path.dirname(pathvar) # /Users/mac/Downloads/python_study/2库
print(res)
# 用join改造, 路径分隔符会根据系统自动添加, 不用自己手动添加, 转义符号的问题被解决了
path1: str = res
path3: str = "test.txt"
# finaPath: str = res + "\\" + path3
# print("finaPath: ", finaPath)
# if not os.path.exists(finaPath):
#     os.system(f"mkdir {finaPath}")
# with open(finaPath, "r", encoding="utf-8") as file:
#     print(file.readlines())
path_new = os.path.join(path1, path3)
print("path_new: ", path_new)
# os.path.exists() 判断文件是否存在
if not os.path.exists(path_new):
    os.system(f"touch {path_new}")
# isdir() 检测路径是否是一个文件夹 返回True或者False
print(os.path.isdir(path_new)) # False
# isfile() 检测路径是否是一个文件 返回True或者False
print(os.path.isfile(path_new)) # True






# 6 !!!!!important: os模块有些时候不能帮我们解决问题, 比如权限...; 或者说os的功能不够丰富
# os主要提供了文件或文件夹的新建、删除、查看等方法, 还提供了对文件以及目录的路径操作
# shutil模块提供了移动、复制、 压缩、解压等操作, 恰好与os互补, 共同一起使用, 基本能完成所有文件的操作

# copyfileobj(fsrc, fdst[, length=16*1024])  复制文件 (length的单位是字符(表达一次读多少字符/字节))
"""
fp_src = open("3.txt",mode="r",encoding="utf-8")
fp_dst = open("4.txt",mode="w",encoding="utf-8")
shutil.copyfileobj(fp_src,fp_dst)
"""

# copyfile(src,dst)   #单纯的仅复制文件内容 , 底层调用了 copyfileobj
# shutil.copyfile("4.txt","5.txt")

# copymode(src,dst)   #单纯的仅复制文件权限 , 不包括内容  (虚拟机共享目录都是默认777)
# 注意: 要先有两个文件才可以,不会默认创建
# shutil.copymode("4.txt","5.txt")


# copystat(src,dst)   #复制所有状态信息,包括权限, 组, 用户, 修改时间等,不包括内容
# shutil.copystat("4.txt","5.txt")


# copy(src,dst)       #复制文件权限和内容
# shutil.copy("5.txt","6.py")


# copy2(src,dst)      #复制文件权限和内容,还包括权限, 组, 用户, 时间等
# shutil.copy2("5.txt","7.py")

# copytree(src,dst)   #拷贝文件夹里所有内容(递归拷贝)。
# shutil.copytree("lianxi","lianxi2")

# rmtree(path)        #删除当前文件夹及其中所有内容(递归删除)  , 目录中有文件也能递归删除, 不能删除文件否则报错
# shutil.rmtree("lianxi2")
